在前一篇文章內容中帶大家跑過一次 Python 中的基礎操作與常見的資料型態的使用。也提供了大家一些額外的使用方法,若有自信的讀者能再去 Day3 看看歐。
Day 3 帶大家使用了基本的資料結構跟對應的操作,但如果要重複的操作它們,總不可能就將那個操作重複寫很多行。如果說現在你的程式會走直線了,今天來帶各位條件判斷及迴圈,讓你的爬蟲程式多了岔路跟迴路。
若讀者學過其它類 C 的語言,都會知道它們都是以大括號來做程式區塊(block)分隔。在 python 中,是以縮排(indentation)來區分程式區塊(block),而縮排大約會使用 2~6 個空白,通常是 4 個空白,讀者也能按下鍵盤上的 Tab
來快速做出類似 4 個空白的效果(在 Vscode 預設下)。
python 中的條件判斷十分易懂,若讀者有撰寫過其他語言的條件判斷,可能會發現 else if
的語法在 python 下是 elif
。 在多種語言的條件判斷大部分都是 if-else
同時出現的,
'''
if 條件:
符合條件後該做的事
'''
temperature = 39
if temperature >= 37.5:
print('發燒')
'''
if 條件:
符合條件後該做的事
else:
不符合條件該做的事
'''
temperature = 36
if temperature >= 37.5:
print('發燒')
else:
print('正常')
'''
if 條件1:
符合 條件1 後該做的事
elif 條件2:
符合 條件2 後該做的事
else:
不符合 條件1 、 條件2 該做的事
'''
temperature = 53
if temperature >= 38:
print('發燒')
elif 38 > temperature >= 37.5:
print('輕微發燒')
else:
print('正常')
Python 中的 for loop 常會以 in
這個關鍵字同時出現。
range(start, stop[, step])
這個函式會回傳一個可迭代對象,常與 for-loop
一同使用。
start
計數將從 start 開始,若不傳入則預設為 0。 ex. range(5) 會是從 0 到 4stop
計數直到大於等於 stop,不包括大於等於 stop 的那個數。 ex. range(0, 4) 會是從 0 到 3step
每次加上多少。 ex. range(0, 5, 2) 會是 0 2 4'''
for 自訂變數 in 序列:
該做的事
'''
seq = ['OwO', 'OAO', 'TwT', 'Orz']
for x in seq: #這邊代表每次照順序拿出 seq 這個串列的元素並賦予給 x
print(x)
'''
OwO
OAO
TwT
Orz
'''
for i in range(len(seq)): #這邊 len(seq) 會回傳 seq 這個 list 的長度
print(i, seq[i])
'''
0 OwO
1 OAO
2 TwT
3 Orz
'''
'''
while 若滿足條件則繼續:
該做的事
'''
counter = 0
while counter < 5: # 將會重複執行直到 counter < 5 不成立,也就是當 counter = 5 那一刻
counter += 1
print(counter)
'''
1
2
3
4
5
'''
#請注意沒有設定好結束條件的 while-loop 是危險的,以下為錯誤示範
while True: # 每次輸出完 SoS 後 while 的條件都會符合,也就會形成無限迴圈,直到 Python crash
print('SoS')
'''
SoS
SoS
SoS
...
'''
若想在迴圈執行到一半時,不做剩下要做的事並進到下一輪或是強制跳出迴圈,會需要使用到 continue
及 break
指令。
跳出本次迴圈,繼續進行下一輪迴圈
for i in range(10):
if i % 2 == 0: # i 對 2 取餘數若為 0 (偶數) 則 continue
continue # 不執行後續代碼,跳到下一輪迴圈
print(i, end = ' ')
#Output: 1 3 5 7 9
強制中止並跳出離這個 break 最近的迴圈
cnt = 0
while True:
if cnt > 7: #若 i > 7
break #不執行後續代碼,並強制跳出迴圈
cnt += 1
print(i, end = ' ')
#Output: 1 2 3 4 5 6 7 8
維持現狀。
讀者可能會疑惑若維持現狀,那就不寫就好,不理解 pass
存在的必要性。先前提到 Python 中的程式區塊(block) 是以縮排來定的,因此我們能想像若有一個 if
下方若未寫任何代碼將無法判斷這是一個程式區塊。實際上程式會報 IndentationError: expected an indented block
錯誤。
pass 常用來填充還沒想要實作功能的函式、條件判斷或迴圈等等,可以把它想成 #TODO 的概念。
for i in range(5):
if i % 2 == 0:
pass # 尚未撰寫功能
print(i)
'''
0
1
2
3
4
'''
#因尚未撰寫實際功能,因此未有任何條件判斷效果
與其他語言不同的, python 能在迴圈後放入 else
,代表著若迴圈正常執行完(沒有遭到 break
強制中止跳出)就會執行到 else
下方的語句,換句話說就是當不滿足迴圈的運行條件時會執行到 else。
for i in range(5):
if i % 2 == 0:
continue
print(i)
else:
print('結束印出偶數迴圈')
'''
1
3
結束印出偶數迴圈
'''
今天跟讀者們介紹了 Python 中條件判斷與迴圈。事實上,Python 的迴圈有許多更簡潔的寫法,也能在單獨一行中與條件判斷做結合,這邊不與讀者說明怕新手在不熟悉的狀況下混淆,下面補充資料有附上述語法的文章。
明天將會帶給大家字串的進階用法。這些用法在幾天之後的爬蟲實戰會起到很大的作用,在 Python 中也預設給了字串許多方便的操作。
[Python教學]搞懂5個Python迴圈常見用法 : https://www.learncodewithmike.com/2019/12/python.html
【Python for 教學】for迴圈與單行的基本用法,新手值得推薦 : https://learn.markteaching.com/【python-for-教學】for迴圈與單行的基本用法/